MAYBE 2.142 H-Termination proof of /home/matraf/haskell/eval_FullyBlown_Fast/empty.hs
H-Termination of the given Haskell-Program with start terms could not be shown:



HASKELL
  ↳ BR

mainModule Main
  ((enumFromThenTo :: ()  ->  ()  ->  ()  ->  [()]) :: ()  ->  ()  ->  ()  ->  [()])

module Main where
  import qualified Prelude



Replaced joker patterns by fresh variables and removed binding patterns.

↳ HASKELL
  ↳ BR
HASKELL
      ↳ COR

mainModule Main
  ((enumFromThenTo :: ()  ->  ()  ->  ()  ->  [()]) :: ()  ->  ()  ->  ()  ->  [()])

module Main where
  import qualified Prelude



Cond Reductions:
The following Function with conditions
undefined 
 | False
 = undefined

is transformed to
undefined  = undefined1

undefined0 True = undefined

undefined1  = undefined0 False

The following Function with conditions
p 
 | n' >= n
 = flip (<=) m
 | otherwise
 = flip (>=) m

is transformed to
p  = p2

p0 True = flip (>=) m

p1 True = flip (<=) m
p1 False = p0 otherwise

p2  = p1 (n' >= n)

The following Function with conditions
takeWhile p [] = []
takeWhile p (x : xs)
 | p x
 = x : takeWhile p xs
 | otherwise
 = []

is transformed to
takeWhile p [] = takeWhile3 p []
takeWhile p (x : xs) = takeWhile2 p (x : xs)

takeWhile0 p x xs True = []

takeWhile1 p x xs True = x : takeWhile p xs
takeWhile1 p x xs False = takeWhile0 p x xs otherwise

takeWhile2 p (x : xs) = takeWhile1 p x xs (p x)

takeWhile3 p [] = []
takeWhile3 wv ww = takeWhile2 wv ww

The following Function with conditions
toEnum 0 = ()

is transformed to
toEnum wx = toEnum1 wx

toEnum0 True wx = ()

toEnum1 wx = toEnum0 (wx == 0) wx



↳ HASKELL
  ↳ BR
    ↳ HASKELL
      ↳ COR
HASKELL
          ↳ LetRed

mainModule Main
  ((enumFromThenTo :: ()  ->  ()  ->  ()  ->  [()]) :: ()  ->  ()  ->  ()  ->  [()])

module Main where
  import qualified Prelude



Let/Where Reductions:
The bindings of the following Let/Where expression
takeWhile p (numericEnumFromThen n n')
where 
p  = p2
p0 True = flip (>=) m
p1 True = flip (<=) m
p1 False = p0 otherwise
p2  = p1 (n' >= n)

are unpacked to the following functions on top level
numericEnumFromThenToP1 wy wz xu True = flip (<=) wy
numericEnumFromThenToP1 wy wz xu False = numericEnumFromThenToP0 wy wz xu otherwise

numericEnumFromThenToP2 wy wz xu = numericEnumFromThenToP1 wy wz xu (wz >= xu)

numericEnumFromThenToP wy wz xu = numericEnumFromThenToP2 wy wz xu

numericEnumFromThenToP0 wy wz xu True = flip (>=) wy



↳ HASKELL
  ↳ BR
    ↳ HASKELL
      ↳ COR
        ↳ HASKELL
          ↳ LetRed
HASKELL
              ↳ NumRed

mainModule Main
  ((enumFromThenTo :: ()  ->  ()  ->  ()  ->  [()]) :: ()  ->  ()  ->  ()  ->  [()])

module Main where
  import qualified Prelude



Num Reduction: All numbers are transformed to thier corresponding representation with Pos, Neg, Succ and Zero.

↳ HASKELL
  ↳ BR
    ↳ HASKELL
      ↳ COR
        ↳ HASKELL
          ↳ LetRed
            ↳ HASKELL
              ↳ NumRed
HASKELL
                  ↳ Narrow
                  ↳ Narrow

mainModule Main
  (enumFromThenTo :: ()  ->  ()  ->  ()  ->  [()])

module Main where
  import qualified Prelude



Haskell To QDPs


↳ HASKELL
  ↳ BR
    ↳ HASKELL
      ↳ COR
        ↳ HASKELL
          ↳ LetRed
            ↳ HASKELL
              ↳ NumRed
                ↳ HASKELL
                  ↳ Narrow
QDP
                      ↳ NonTerminationProof
                  ↳ Narrow

Q DP problem:
The TRS P consists of the following rules:

new_mapnew_map

R is empty.
Q is empty.
We have to consider all minimal (P,Q,R)-chains.
We used the non-termination processor [17] to show that the DP problem is infinite.
Found a loop by semiunifying a rule from P directly.

The TRS P consists of the following rules:

new_mapnew_map

The TRS R consists of the following rules:none


s = new_map evaluates to t =new_map

Thus s starts an infinite chain as s semiunifies with t with the following substitutions:




Rewriting sequence

The DP semiunifies directly so there is only one rewrite step from new_map to new_map.




Haskell To QDPs


↳ HASKELL
  ↳ BR
    ↳ HASKELL
      ↳ COR
        ↳ HASKELL
          ↳ LetRed
            ↳ HASKELL
              ↳ NumRed
                ↳ HASKELL
                  ↳ Narrow
                  ↳ Narrow
                    ↳ AND
QDP
                        ↳ PisEmptyProof
                      ↳ QDP

Q DP problem:
P is empty.
R is empty.
Q is empty.
We have to consider all (P,Q,R)-chains.
The TRS P is empty. Hence, there is no (P,Q,R) chain.

↳ HASKELL
  ↳ BR
    ↳ HASKELL
      ↳ COR
        ↳ HASKELL
          ↳ LetRed
            ↳ HASKELL
              ↳ NumRed
                ↳ HASKELL
                  ↳ Narrow
                  ↳ Narrow
                    ↳ AND
                      ↳ QDP
QDP
                        ↳ NonTerminationProof

Q DP problem:
The TRS P consists of the following rules:

new_map([]) → new_map([])

R is empty.
Q is empty.
We have to consider all (P,Q,R)-chains.
We used the non-termination processor [17] to show that the DP problem is infinite.
Found a loop by semiunifying a rule from P directly.

The TRS P consists of the following rules:

new_map([]) → new_map([])

The TRS R consists of the following rules:none


s = new_map([]) evaluates to t =new_map([])

Thus s starts an infinite chain as s semiunifies with t with the following substitutions:




Rewriting sequence

The DP semiunifies directly so there is only one rewrite step from new_map([]) to new_map([]).